package com.hy.study.register;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.io.File;

/**
 * 初始化 h2数据库
 *
 * @author huyong
 * @date 2024 年 01 月 05 日 15:09: 24
 */
@Slf4j
@Service
@AutoConfigureAfter(DataSource.class)// DataSource创建完之后才初始化此类
public class H2DataSourceConfig {

    private static final String SCHEMA = "classpath:db/schema-h2.sql";
    @Autowired
    private DataSource dataSource;
    @Autowired
    private ApplicationContextRegister applicationContextRegister;// 自定义注册器

    // 使用js250 在spring容器初始化的时候执行该方法
    @PostConstruct
    public void inith2db() throws Exception {
        // 初始化本地h2数据库
        String userHome = System.getProperty("user.home");
        File f = new File(userHome + File.separator + "my.lock");
        if (!f.exists()) {
            log.info("-----------开始初始化h2数据库-----------");
            //创建一个标识文件,只有在第一次初始化数据库时会创建,如果系统用户目录下有这个文件,就不会重新执行sql脚本
            f.createNewFile();
            Resource resource = applicationContextRegister.getResource(SCHEMA);
            ScriptUtils.executeSqlScript(dataSource.getConnection(), resource);// 手动执行SQL语句
        }

    }
}
